package com.github.bridge.controller;

import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.extra.servlet.ServletUtil;
import com.github.bridge.handler.ESignHandler;
import com.github.bridge.util.R;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

@Slf4j
@Controller
@RequestMapping("/")
@RequiredArgsConstructor
@Tag(name = "测试")
@ApiSupport(order = 1, author = "张辉|jwtpermission@gmail.com")
public class HomeController {
    private final ESignHandler eSignHandler;

    @SaIgnore
    @GetMapping("/")
    @ResponseBody
    @Operation(summary = "测试", description = "这是测试接口 <br/>" +
            "签章流程是这样的：<br/> " +
            "1. 文件相关-通过模板id生成待签署文件(返回fileKey) <br/>" +
            "2. 外部机构用户等-生成外部用户(返回accountId) 如果身份证号和姓名已经绑定 返回code:1500012 需要业务方删除掉外部用户 <br/>" +
            "3. 外部机构用户等-生成外部用户印章(返回base64) <br/>" +
            "4. 签署相关-外部用户签章(必须先外部 传accountId fileKey base64等" +
            "返回半签署后的fileKey) <br/>" +
            "5. 签章相关-内部签署(传半签署后的fileKey 等等) <br/> " +
            "用systemId和密钥先获取token，后面所有接口的请求头添加 Authorization:token <br/>" +
            "分配systemId区分不同业务系统 <br/>" +
            "有合并的接口 内部是将多个接口一步操作 根据需要选择 <br/>" +
            "<hr></hr>" +
            "注意： <br/>" +
            "1. 接口文件直传 是文件上传接口 需要用form-data 不是json 显示问题 <br/>" +
            "2. 内部签署是一个文件操作过程 总会有耗时或者磁盘 或者网络波动的问题 所以建议用支付回调的方式让通知签署成功或失败 再做业务补偿 这里建议回调+查询的方式 业务方务必要做签署失败后的定时重新发起或者其他处理" +
            "<br/>")
    @ApiOperationSupport(order = 1, author = "张辉")
    public R<String> home(HttpServletRequest request) {
        log.info("请求ip:{}", ServletUtil.getClientIP(request));
        return R.ok("如果看到这句话 恭喜服务部署成功！");
    }

    @SaIgnore
    @GetMapping("/config")
    @Operation(summary = "首页")
    @Hidden
    @ApiOperationSupport(order = 2, author = "张辉")
    public String index(HttpServletRequest request) {
        log.info("请求ip:{}", ServletUtil.getClientIP(request));
        return "config";
    }
}
